
#pragma used+
sfrb PINB=3;
sfrb DDRB=4;
sfrb PORTB=5;
sfrb PINC=6;
sfrb DDRC=7;
sfrb PORTC=8;
sfrb PIND=9;
sfrb DDRD=0xa;
sfrb PORTD=0xb;
sfrb TIFR0=0x15;
sfrb TIFR1=0x16;
sfrb TIFR2=0x17;
sfrb PCIFR=0x1b;
sfrb EIFR=0x1c;
sfrb EIMSK=0x1d;
sfrb GPIOR0=0x1e;
sfrb EECR=0x1f;
sfrb EEDR=0x20;
sfrb EEARL=0x21;
sfrb EEARH=0x22;
sfrw EEAR=0x21;   
sfrb GTCCR=0x23;
sfrb TCCR0A=0x24;
sfrb TCCR0B=0x25;
sfrb TCNT0=0x26;
sfrb OCR0A=0x27;
sfrb OCR0B=0x28;
sfrb GPIOR1=0x2a;
sfrb GPIOR2=0x2b;
sfrb SPCR=0x2c;
sfrb SPSR=0x2d;
sfrb SPDR=0x2e;
sfrb ACSR=0x30;
sfrb SMCR=0x33;
sfrb MCUSR=0x34;
sfrb MCUCR=0x35;
sfrb SPMCSR=0x37;
sfrb SPL=0x3d;
sfrb SPH=0x3e;
sfrb SREG=0x3f;
#pragma used-

#asm
	#ifndef __SLEEP_DEFINED__
	#define __SLEEP_DEFINED__
	.EQU __se_bit=0x01
	.EQU __sm_mask=0x0E
	.EQU __sm_adc_noise_red=0x02
	.EQU __sm_powerdown=0x04
	.EQU __sm_powersave=0x06
	.EQU __sm_standby=0x0C
	.SET power_ctrl_reg=smcr
	#endif
#endasm

#pragma used+

void delay_us(unsigned int n);
void delay_ms(unsigned int n);

#pragma used-

typedef unsigned char       BOOL;

typedef unsigned char       BYTE;
typedef unsigned short      WORD;
typedef unsigned long       DWORD;

typedef unsigned char       UINT8;
typedef unsigned short      UINT16;
typedef unsigned long       UINT32;

typedef signed char         INT8;
typedef signed short        INT16;
typedef signed long         INT32;

void halSpiStrobe(BYTE strobe);

BYTE halSpiReadStatus(BYTE addr);

void halSpiWriteReg(BYTE addr, BYTE value);

BYTE halSpiReadReg(BYTE addr);

void halSpiWriteBurstReg(BYTE addr, BYTE *buffer, BYTE count);

void halSpiReadBurstReg(BYTE addr, BYTE *buffer, BYTE count);

typedef struct S_RF_SETTINGS{
BYTE FSCTRL1;   
BYTE FSCTRL0;   
BYTE FREQ2;     
BYTE FREQ1;     
BYTE FREQ0;     
BYTE MDMCFG4;   
BYTE MDMCFG3;   
BYTE MDMCFG2;   
BYTE MDMCFG1;   
BYTE MDMCFG0;   
BYTE CHANNR;    
BYTE DEVIATN;   
BYTE FREND1;    
BYTE FREND0;    
BYTE MCSM0;     
BYTE FOCCFG;    
BYTE BSCFG;     
BYTE AGCCTRL2;  
BYTE AGCCTRL1;  
BYTE AGCCTRL0;  
BYTE FSCAL3;    
BYTE FSCAL2;    
BYTE FSCAL1;    
BYTE FSCAL0;    
BYTE FSTEST;    
BYTE TEST2;     
BYTE TEST1;     
BYTE TEST0;     
BYTE IOCFG2;    
BYTE IOCFG0;    
BYTE PKTCTRL1;  
BYTE PKTCTRL0;  
BYTE ADDR;      
BYTE PKTLEN;    
} RF_SETTINGS;

void halRfWriteRfSettings(flash RF_SETTINGS *pRfSettings);

void halRfSendPacket(BYTE *txBuffer, UINT8 size);

flash unsigned char CRC8_TAB[256] = {
0x00,0x07,0x0E,0x09,0x1C,0x1B,0x12,0x15,0x38,0x3F,0x36,0x31,0x24,0x23,0x2A,0x2D,
0x70,0x77,0x7E,0x79,0x6C,0x6B,0x62,0x65,0x48,0x4F,0x46,0x41,0x54,0x53,0x5A,0x5D,
0xE0,0xE7,0xEE,0xE9,0xFC,0xFB,0xF2,0xF5,0xD8,0xDF,0xD6,0xD1,0xC4,0xC3,0xCA,0xCD,
0x90,0x97,0x9E,0x99,0x8C,0x8B,0x82,0x85,0xA8,0xAF,0xA6,0xA1,0xB4,0xB3,0xBA,0xBD,
0xC7,0xC0,0xC9,0xCE,0xDB,0xDC,0xD5,0xD2,0xFF,0xF8,0xF1,0xF6,0xE3,0xE4,0xED,0xEA,
0xB7,0xB0,0xB9,0xBE,0xAB,0xAC,0xA5,0xA2,0x8F,0x88,0x81,0x86,0x93,0x94,0x9D,0x9A,
0x27,0x20,0x29,0x2E,0x3B,0x3C,0x35,0x32,0x1F,0x18,0x11,0x16,0x03,0x04,0x0D,0x0A,
0x57,0x50,0x59,0x5E,0x4B,0x4C,0x45,0x42,0x6F,0x68,0x61,0x66,0x73,0x74,0x7D,0x7A,
0x89,0x8E,0x87,0x80,0x95,0x92,0x9B,0x9C,0xB1,0xB6,0xBF,0xB8,0xAD,0xAA,0xA3,0xA4,
0xF9,0xFE,0xF7,0xF0,0xE5,0xE2,0xEB,0xEC,0xC1,0xC6,0xCF,0xC8,0xDD,0xDA,0xD3,0xD4,
0x69,0x6E,0x67,0x60,0x75,0x72,0x7B,0x7C,0x51,0x56,0x5F,0x58,0x4D,0x4A,0x43,0x44,
0x19,0x1E,0x17,0x10,0x05,0x02,0x0B,0x0C,0x21,0x26,0x2F,0x28,0x3D,0x3A,0x33,0x34,
0x4E,0x49,0x40,0x47,0x52,0x55,0x5C,0x5B,0x76,0x71,0x78,0x7F,0x6A,0x6D,0x64,0x63,
0x3E,0x39,0x30,0x37,0x22,0x25,0x2C,0x2B,0x06,0x01,0x08,0x0F,0x1A,0x1D,0x14,0x13,
0xAE,0xA9,0xA0,0xA7,0xB2,0xB5,0xBC,0xBB,0x96,0x91,0x98,0x9F,0x8A,0x8D,0x84,0x83,
0xDE,0xD9,0xD0,0xD7,0xC2,0xC5,0xCC,0xCB,0xE6,0xE1,0xE8,0xEF,0xFA,0xFD,0xF4,0xF3
};

unsigned char CRC8(unsigned char * ucpData, unsigned char ucLen){
unsigned char ucIndex;      
unsigned char ucCRC8 = 0;   

while (ucLen --){
ucIndex = ucCRC8 ^ (* ucpData ++);
ucCRC8 = CRC8_TAB[ucIndex];
}

return (~ucCRC8);
}

#pragma used+

unsigned char cabs(signed char x);
unsigned int abs(int x);
unsigned long labs(long x);
float fabs(float x);
int atoi(char *str);
long int atol(char *str);
float atof(char *str);
void itoa(int n,char *str);
void ltoa(long int n,char *str);
void ftoa(float n,unsigned char decimals,char *str);
void ftoe(float n,unsigned char decimals,char *str);
void srand(int seed);
int rand(void);
void *malloc(unsigned int size);
void *calloc(unsigned int num, unsigned int size);
void *realloc(void *ptr, unsigned int size); 
void free(void *ptr);

#pragma used-
#pragma library stdlib.lib

extern void cc1100_init (void);
extern BOOL RfReceivePacket(BYTE *rxBuffer, UINT8 *length);

unsigned char rf_err;
unsigned char rf_data[]="abcdefg";
unsigned char rf_data_len;

interrupt [3] void ext_int1_isr(void)
{

}

void CHIP_INT(void) {

#pragma optsize-
(*(unsigned char *) 0x61)=0x80;
(*(unsigned char *) 0x61)=0x00;

PORTB=0x00;
DDRB=0x2D;

PORTC=0x0C;
DDRC=0x0C;

PORTD=0x00;
DDRD=0xE0;

TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

(*(unsigned char *) 0x80)=0x00;
(*(unsigned char *) 0x81)=0x00;
(*(unsigned char *) 0x85)=0x00;
(*(unsigned char *) 0x84)=0x00;
(*(unsigned char *) 0x87)=0x00;
(*(unsigned char *) 0x86)=0x00;
(*(unsigned char *) 0x89)=0x00;
(*(unsigned char *) 0x88)=0x00;
(*(unsigned char *) 0x8b)=0x00;
(*(unsigned char *) 0x8a)=0x00;

(*(unsigned char *) 0xb6)=0x00;
(*(unsigned char *) 0xb0)=0x00;
(*(unsigned char *) 0xb1)=0x00;
(*(unsigned char *) 0xb2)=0x00;
(*(unsigned char *) 0xb3)=0x00;
(*(unsigned char *) 0xb4)=0x00;

(*(unsigned char *) 0x69)=0x00;
EIMSK=0x00;
(*(unsigned char *) 0x68)=0x00;

(*(unsigned char *) 0x6e)=0x00;

(*(unsigned char *) 0x6f)=0x00;

(*(unsigned char *) 0x70)=0x00;

ACSR=0x80;
(*(unsigned char *) 0x7b)=0x00;

SPCR=0x50;
SPSR=0x00;
}

void error_process(void){
if (rf_err == 1) {
cc1100_init();
rf_err = 0;
}
}

void main(void) {

unsigned int tmp;
unsigned char ao[]={0xA5, 0x0B, 0xE9, 0x03, 0xD2, 0x04, 0x01, 0x65, 0x00, 0x00, 0x90, 0xFF, 0xED};
unsigned char ac[]={0xA5, 0x0A, 0xE9, 0x03, 0xD2, 0x04, 0x01, 0x65, 0x00, 0x00, 0x92, 0x60};
unsigned char bo[]={0xA5, 0x0B, 0xE9, 0x03, 0xD2, 0x04, 0x01, 0x66, 0x00, 0x00, 0x90, 0xFF, 0x4B};
unsigned char bc[]={0xA5, 0x0A, 0xE9, 0x03, 0xD2, 0x04, 0x01, 0x66, 0x00, 0x00, 0x92, 0x5A};
CHIP_INT();
cc1100_init();
rf_err = 0;

DDRD|=(1<<4);
PORTD.4                  = 0;     

while(1)
{

error_process();

{
rf_data_len =13;
halRfSendPacket(ao,rf_data_len);
if(PORTD.4                  )
{PORTD.4                  =0;}
else
{PORTD.4                  =1;}
delay_ms(100);
rf_data_len = 12;
halRfSendPacket(ac,rf_data_len);
if(PORTD.4                  )
{PORTD.4                  =0;}
else
{PORTD.4                  =1;}
delay_ms(100);
rf_data_len =13;
halRfSendPacket(bo,rf_data_len);
if(PORTD.4                  )
{PORTD.4                  =0;}
else
{PORTD.4                  =1;}
delay_ms(100);
rf_data_len = 12;
halRfSendPacket(bc,rf_data_len);
if(PORTD.4                  )
{PORTD.4                  =0;}
else
{PORTD.4                  =1;}
delay_ms(100);

}

}

}
